Transakce a obsluha exception v Try-except (FB)

Otázka od: Tomas Bradle

9. 6. 2004 23:42

Zdravim,

mam ukladani do databaze uzavrene do bloku TRY-EXCEPT nasledujicim zpusobem:

trWrite.StartTransaction;
try
  {tady jsou operace na transakci trWrite}
  trWrite.Commit;
 except
  trWrite.Rollback;
 end; {try}

Kdyz vznikne exception pri ukladani, zmeny se neprojevi, ale je to
"potichu". Ja jsem zkousel pridat za rollback jeste "raise;", aby se vyjimka
sirila dal a dala se zase odchytit. Je to spravny postup? Jake mate
prakticke zkusenosti?

diky

Tomas Bradle
t.bradle@worldonline.cz



Odpovedá: Petr Zahradnik

9. 6. 2004 23:45

Puvodni zprava ze dne 10.6.2004:

> Kdyz vznikne exception pri ukladani, zmeny se neprojevi, ale je to
> "potichu". Ja jsem zkousel pridat za rollback jeste "raise;", aby se
> vyjimka sirila dal a dala se zase odchytit. Je to spravny postup?

Ano, je. Pripadne si tim raise vyvolas svou vlastni vyjimku, abys ji
lepe poznal.

> Jake mate prakticke zkusenosti?

S cim prakticke zkusenosti? Jestli to jako funguje? No funguje.

Petr Zahradnik, pocitacovy expert

==========================================================
Petr Zahradnik, Computer Laboratory
Obvodova 740/14, 400 07 Usti nad Labem
telefon: 475 501 627, mobil: 602 409 601, fax: 475 511 338
web: http://www.clexpert.cz, e-mail: clexpert@clexpert.cz
ICQ: 21215917, MSN: clexpert@clexpert.cz
==========================================================



Odpovedá: Lebeda David

10. 6. 2004 7:24

> trWrite.StartTransaction;
> try
> {tady jsou operace na transakci trWrite}
> trWrite.Commit;
> except
> trWrite.Rollback;
> end; {try}
>
> Kdyz vznikne exception pri ukladani, zmeny se neprojevi, ale je to
> "potichu". Ja jsem zkousel pridat za rollback jeste "raise;", aby se
> vyjimka sirila dal a dala se zase odchytit. Je to spravny postup? Jake
> mate prakticke zkusenosti?

Ahoj,

pouziti raise je mozna cesta, zalezi, co potrebujes docilit. Muzes i v tom
except bloku
pouzit neco jako

except
 on E: Exception do
 begin
  trWrite.Rollback;
 ShowMessage('Pri pokusu o to a to nastala vyjimka: ' + E.Message);
 ...pripadne exit;
 end;
end;

cimz vyjimku zobrazis a je ted uz jen na tobe, zda ji chces poslat dal nebo ne.

David Lebeda